package com.aptech.util;

import java.util.ArrayList;
import java.util.List;

import org.dozer.DozerBeanMapper;
import org.dozer.Mapper;

/**
 * VO和PO相互转换的类
 */
public class VoPoConverter
{
    /**
     * VO和PO之间相互转换,将源对象的同名属性复制目标对象中
     * 前提:源对象和目标对象都必须存在
     * @param src 源对象
     * @param desc 目标对象
     */
    public static void copyProperties(Object src, Object desc){
	if (src == null) return;
	Mapper mapper = new DozerBeanMapper();
	mapper.map(src, desc);
    }

    /**
     * VO和PO之间相互转换,先创建对象,再将源对象的同名属性复制目标对象中
     * @param <T> 目标类型
     * @param src 源对象
     * @param descType 目标类型
     * @return
     */
    public static <T> T copyProperties(Object src, Class<T> descType){
	if (src == null) return null;
	Mapper mapper = new DozerBeanMapper();
	return mapper.map(src, descType);
    }

    /**
     * 将源集合转换为目标集合,注意:目标集合是新建的
     * @param <T>
     * @param srcList 源集合
     * @param descType 目标集合中元素的类型
     * @return
     */
    public static <T> List<T> copyList(List srcList, Class<T> descType){
	if (srcList == null) return null;
	List<T> descList = new ArrayList<T>();
	for (Object obj : srcList) {
	    T t = VoPoConverter.copyProperties(obj, descType);
	    descList.add(t);
	}
	return descList;
    }

}